The testing of software continues to evolve as a science. Originally there was no automated testing of software. Software was tested manually, usually by the developer, often using a hands-on trial and error process. Over time, some tools dubbed “record and replay” tools were developed. A user would typically sit at the computer on which a piece of software (e.g., application) was to be tested and manually run through a test. By monitoring the user interaction, a record tool captured the keystrokes, mouse clicks, voice commands, and so on that occurred during the test. The keystrokes and so on may have been stored in a file. Later, these recorded actions could be replayed to automatically test the software by recreating the keystrokes and so on that were performed during the live testing. To use this type of tool, the tester typically required direct physical access to the computer on which the software was being tested, both during the record and test phase. This limited the testing. Additionally, the recorded keystrokes and so on may have had to be stored on the computer on which the software was being tested, further limiting the testing.
While the initial record and replay tools were an improvement over hands-on manual testing, further developments continued. For example, client/server based record and replay tools were developed. In these tools, an application to be tested and the test tool could be located on different computers. A tester would access a server that hosted the test tool and also access a client upon which the application to be tested was located. Recorded keystrokes and so on may have been stored in a file on a file system on either the server or the client. Direct, dedicated connections between client and server coupled with file system based storage of recorded keystrokes and so on characterized this next generation of tools.